home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #1 / Amiga Plus CD - 1997 - No. 01.iso / pd / programmierung / proasm / routines / appicon.r < prev    next >
Text File  |  1994-03-31  |  6KB  |  258 lines

  1.  
  2. ;---;  AppIcon.r  ;------------------------------------------------------------
  3. *
  4. *    ****    AppIcon support routines    ****
  5. *
  6. *    Author        Daniel Weber
  7. *    Version        1.00
  8. *    Last Revision    12.11.93
  9. *    Identifier    app_defined
  10. *       Prefix        app_    (AppIcon)
  11. *                 ¯¯¯
  12. *    Functions    InitAppIconImage    (CALL_)
  13. *            InitAppIcon        (bsr)
  14. *            RemAppIcon        (bsr)
  15. *            OnAppIcon        (bsr)
  16. *            OffApIcon        (bsr)
  17. *
  18. *    Notes        - the workbench.library and icon.library must already
  19. *              be open.
  20. *            - every pointer etc. is stored in my AppIcon Structure
  21. *            - InitAppIconImage needs cws_wbmessage (from startup4.r)
  22. *
  23. ;------------------------------------------------------------------------------
  24.  
  25.     IFND    app_defined
  26. app_defined    SET    1
  27.  
  28. ;------------------
  29. app_oldbase    EQU __BASE
  30.     base    app_base
  31. app_base:
  32.  
  33. ;------------------
  34.     opt    sto,o+,ow-,q+,qw-        ;all optimisations on
  35.  
  36.  
  37. ;------------------
  38.     incdir    'include:','routines:'
  39.     include    ports.r
  40.     include    structs.r
  41.  
  42.  
  43.  
  44. ;------------------------------------------------------------------------------
  45. *
  46. * InitAppIconImage    - Initialize AppIcon Image
  47. *
  48. * Grap the current icon assigned to 'this' program.
  49. *
  50. * INPUT:    A0    AppIcon Structure (AppIconStruct_ from Structs.r)
  51. *
  52. * RESULT:    D0    Pointer to Image buffer or zero if failed
  53. *
  54. * NOTE:        This routines changes the main structure datas only if
  55. *        it didn't failed.
  56. *
  57. ;------------------------------------------------------------------------------
  58.  
  59.     IFD    xxx_InitAppIconImage
  60. InitAppIconImage:
  61.     movem.l    d0-a6,-(a7)
  62.     clr.l    (a7)                ;faked return value (error)
  63.     move.l    a0,a4
  64.     moveq    #0,d7
  65.     moveq    #0,d4
  66.     move.l    cws_homedir(pc),d1        ;homedir support
  67.     move.l    cws_wbmessage(pc),d0
  68.     beq    .out
  69.     move.l    d0,a3
  70.     move.l    36(a3),d0            ;sm_ArgList
  71.     beq    .out
  72.     move.l    d0,a3
  73.     move.l    (a3),d1                ;wa_Lock
  74. .cd:    move.l    DosBase(pc),a6
  75.     jsr    -126(a6)            ;_LVOCurrentDir
  76.     move.l    d0,d7
  77.     move.l    4(a3),a0            ;wa_Name
  78.     move.l    IconBase(pc),a6
  79.     jsr    -132(a6)        ;_LVOGetDiskObjectNew (get .info file)
  80.     exg    d0,d7
  81.     move.l    d0,d1                ;oldlock
  82.     move.l    DosBase(pc),a6
  83.     jsr    -126(a6)            ;_LVOCurrentDir
  84.     move.l    d7,d4                ;d4: DiskObject
  85.     beq.s    .out
  86.  
  87.     move.l    d7,a0
  88.     move.l    18+4(a0),a3            ;gg_GadgetRender +do_gadget
  89.     move.w    4(a3),d0            ;ig_Width
  90.     move.w    6(a3),d6            ;ig_Height
  91.     move.w    d0,d5
  92.     addq.l    #7,d0
  93.     addq.l    #8,d0
  94.     and.b    #$f0,d0
  95.     mulu    d6,d0
  96.     lsr.l    #3,d0
  97.     mulu    8(a3),d0            ;*depth (word*word, should be ok)
  98.     move.l    d0,d7
  99.     beq.s    .out                ;no image dimensions (?)
  100.     moveq    #20,d1                ;ig_SIZEOF
  101.     add.l    d1,d0
  102.     move.l    #$10002,d1            ;memf_chip + memf_clear
  103.     move.l    4.w,a6
  104.     jsr    -684(a6)            ;AllocVec()    
  105.     move.l    d0,a1
  106.     move.l    a1,d0
  107.     beq.s    .out
  108.  
  109.     movem.w    d5/d6,4(a1)            ;set width and height
  110.     move.w    8(a3),8(a1)            ;depth
  111.     move.b    14(a3),14(a1)            ;PlanePic
  112.     move.l    10(a3),a3            ;ImageData
  113.     lea    20(a1),a1            ;ig_SIZEOF
  114.     move.l    a1,-20+10(a1)            ;ImageData
  115.  
  116. .loop:    move.b    (a3)+,(a1)+            ;copy image
  117.     subq.l    #1,d7
  118.     bne.s    .loop
  119.  
  120.     movem.w    d5/d6,app_ai_Width(a4)
  121.     move.l    d0,app_ai_pic(a4)        ;gg_GadgetRender
  122.  
  123.     move.l    d0,app_AppImage(a4)
  124.     move.l    d0,(a7)                ;set return value
  125. .out:    tst.l    d4
  126.     beq.s    .done
  127.     move.l    d4,a0
  128.     move.l    IconBase(pc),a6
  129.     jsr    _LVOFreeDiskObject(a6)
  130. .done:    movem.l    (a7)+,d0-a6
  131.     rts
  132.     ENDC
  133.  
  134.  
  135. ;------------------------------------------------------------------------------
  136. *
  137. * InitAppIcon    - Initialize an AppIcon
  138. *
  139. * INPUT:    A0    AppIcon Structure (AppIconStruct_ from Structs.r)
  140. *        A1    Message Port Structure (use PortStruct_ from Structs.r)
  141. *
  142. * RESULT:    D0    AppIcon Message Port or zero if failed (CCR)
  143. *
  144. ;------------------------------------------------------------------------------
  145.  
  146. InitAppIcon:
  147.     movem.l    d2-a6,-(a7)
  148.     exg    a0,a1
  149.     bsr    MakePort
  150.     move.l    d0,app_AppPort(a1)
  151.     beq.s    \error
  152.     move.l    d0,a2
  153.     clr.b    LN_PRI(a2)
  154.     clr.l    LN_NAME(a2)
  155.     move.l    a2,d0
  156. \error:    movem.l    (a7)+,d2-a6
  157.     rts
  158.  
  159.  
  160.  
  161. ;------------------------------------------------------------------------------
  162. *
  163. * RemAppIcon    - Remove an AppIcon
  164. *
  165. * INPUT:    A0    AppIcon Structure (AppIconStruct_ from Structs.r)
  166. *
  167. * RESULT:    none
  168. *
  169. ;------------------------------------------------------------------------------
  170.  
  171. RemAppIcon:
  172.     movem.l    d0-a6,-(a7)
  173.     move.l    a0,a2
  174.     bsr    OffAppIcon            ;remove AppIcon
  175.     move.l    app_AppPort(a2),d0
  176.     beq.s    1$
  177.     move.l    d0,a0
  178.     bsr    UnMakePort            ;free Port
  179. 1$:    clr.l    app_AppPort(a2)
  180.     move.l    app_AppImage(a2),d0
  181.     beq.s    2$
  182.     move.l    d0,a1                ;free Image Buffer
  183.     move.l    4.w,a6
  184.     jsr    -690(a6)            ;FreeVec()
  185. 2$:    movem.l    (a7)+,d0-a6
  186.     rts
  187.  
  188.  
  189.  
  190. ;------------------------------------------------------------------------------
  191. *
  192. * OnAppIcon    - Display AppIcon
  193. *
  194. * INPUT:    D0    id (this variable is strictly for your own use and is
  195. *                ignored by workbench)
  196. *        D1    userdata (only for your own use - see above)
  197. *        A0    AppIcon Structure (AppIconStruct_ from Structs.r)
  198. *
  199. * RESULT:    D0    AppIcon Structure or zero if failed (CCR)
  200. *
  201. ;------------------------------------------------------------------------------
  202.  
  203. OnAppIcon:
  204.     movem.l    d1-a6,-(a7)
  205.     move.l    a0,a4
  206.     lea    app_AppText(a4),a0        ;icon text
  207.     move.l    app_AppPort(a4),d0
  208.     beq.s    1$
  209.     move.l    d0,a1                ;msgport
  210.     sub.l    a2,a2                ;no lock
  211.     lea    app_AppIconDef(a4),a3        ;diskobj
  212.     move.l    a4,-(a7)
  213.     sub.l    a4,a4                ;no tag list
  214.     move.l    WorkbenchBase(pc),a6
  215.     jsr    -60(a6)                ;AddAppIconA
  216.     move.l    (a7)+,a4
  217.     move.l    d0,app_AppIcon(a4)
  218.     beq.s    1$
  219.     move.l    a4,d0
  220. 1$:    movem.l    (a7)+,d1-a6
  221.     rts
  222.  
  223.  
  224.  
  225. ;------------------------------------------------------------------------------
  226. *
  227. * OffAppIcon    - Remove AppIcon from Workbench
  228. *
  229. * INPUT:    A0    AppIcon Structure (AppIconStruct_ from Structs.r)
  230. *
  231. * RESULT:    none
  232. *
  233. ;------------------------------------------------------------------------------
  234.  
  235. OffAppIcon:
  236.     movem.l    d0-a6,-(a7)
  237.     move.l    a0,a4
  238.     move.l    app_AppIcon(a4),d0
  239.     beq.s    1$
  240.     move.l    d0,a0
  241.     move.l    WorkbenchBase(pc),a6
  242.     jsr    -66(a6)            ;RemoveAppIcon()
  243.     clr.l    app_AppIcon(a4)
  244. 1$:    movem.l    (a7)+,d0-a6
  245.     rts
  246.  
  247.  
  248. ;--------------------------------------------------------------------
  249.  
  250.     base    app_oldbase
  251.     opt    rcl
  252.  
  253. ;------------------
  254.     ENDIF
  255.  
  256.  end
  257.  
  258.